package com.tedu.springmvc.controller;

import com.tedu.springmvc.mapper.UserInfoMapper;
import com.tedu.springmvc.pojo.dto.UserDTO;
import com.tedu.springmvc.pojo.entity.UserInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;

@Controller
public class UserController {
    /**
 * @RequestMapping注解，用于让SpringMVC框架知道，当一个对应的请求发过来时
 * 应当让哪个方法来处理
 *
 * @ResponseBody注解允许当前方法将返回值作为响应内容发送给客户端(浏览器)
 *
 *
 * 单词:Request  请求
 *     Response 响应
 *
 * 客户端发送给服务端的内容称为"请求"
 * 服务端回复给客户端的内容称为"响应"
 *
 * 第一种接收客户端发送的参数方式:
 * 在当前方法参数类型:HttpServletRequest，这个是javaEE定义的标准
 * 该类的每一个实例用于表示客户端发送过来的一个【请求】的所有内容
 *
 * 接收到HttpServletRequest对象后，通过它可以获取客户端发送过来的参数内容，对应方法:
 * String getParameter(String) : 根据参数名获取对应的参数值
 *
 */

    /**
     *  第二种接收客户端传递归来参数的方式:
     *  在当前方法上定义对应的参数，保证参数名和客户端传递过来的参数的名字一致即可。
     *  【这里方法上参数类型可以是整数，SpringMVC框架还会自动转换，前提是客户端传递过来的该
     *  参数可以成功转换为整数。】
     *
     *  /regUser?username=范传奇&password=123456&nickname=传奇&age=22
     *              ^
     *            保证参数名一致
     *                 v
     *  reg(String username, String password,String nickname,int age){
     */
//    @RequestMapping("/regUser")
//    @ResponseBody
//    public String reg(HttpServletRequest request){
//        System.out.println("开始处理用户注册操作");
//
//        String username = request.getParameter("username");
//        String password = request.getParameter("password");
//        String nickname = request.getParameter("nickname");
//        int age = Integer.parseInt(request.getParameter("age"));
//        System.out.println(username+" "+password+" "+nickname+" "+age);
//
//        return "注册成功";
//    }
//    @RequestMapping("/regUser")
//    @ResponseBody
//    public String reg(String username,String password,String nickname,int age){
//        System.out.println(username+" "+password+" "+nickname+" "+age);
//        return "注册成功";
//    }
    /**
     * 第三种接收客户端传递过来参数的方式:设计数据传输对象 DTO
     *
     * 这里在方法上直接定义一个DTO类型的参数，保证这个类中属性的设计与参数一致即可
     * SpringMVC框架会自动实例化一个该类的实例，并将参数按照对应的属性设置好，然后将
     * 该对象传递给这个方法
     */

    @Autowired
    private UserInfoMapper userInfoMapper;
    @RequestMapping("/regUser")
    @ResponseBody
    public String reg(UserDTO userDTO){
        System.out.println(userDTO);
        UserInfo userInfo = new UserInfo();
        userInfo.setUsername(userDTO.getUsername());
        userInfo.setPassword(userDTO.getPassword());
        userInfo.setNickname(userDTO.getNickname());
        userInfo.setAge(userDTO.getAge());
        int num = userInfoMapper.insertUser(userInfo);
        return num > 0 ? "注册成功":"注册失败";
    }
}
